package org.larkdoc.service;

import java.util.List;

import org.larkdoc.model.bo.ProjectBO;
import org.larkdoc.model.entity.ProjectInfo;
import org.larkdoc.model.vo.PageVO;
import org.larkdoc.model.vo.ProjectVO;

import com.github.pagehelper.PageInfo;

/**
 * 项目业务接口
 * 
 * @author  zhangpeijun[zhangpeijun1024@qq.com]
 * @version  [v1.0.1, 2017年10月17日]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
public interface ProjectService {
    /**
     * 根据ID删除记录
     * @param id
     * @return
     * 
     * @returns int
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午3:44:51
     */
    int deleteByPrimaryKey(Integer id);
    
    /**
     * 根据ID集和用户帐号删除记录
     * @param ids
     * @param account
     * @return
     * 
     * @returns int
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午3:56:10
     */
    int deleteByIdsAndAccount(int[] ids, String account);
    
    /**
     * 新增记录
     * @param record
     * @return
     * 
     * @returns int
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午3:56:06
     */
    int insert(ProjectInfo record);
    
    /**
     * 新增项目，并且添加其业务关系
     * @param projectBO
     * @return [参数说明]
     * 
     * @return int [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年6月8日上午11:05:36
     */
    int insertSelective(ProjectBO projectBO);
    
    /**
     * 新增记录:只记录对象非空属性
     * @param record
     * @return
     * 
     * @returns int
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午3:53:17
     */
    int insertSelective(ProjectInfo record);
    
    /**
     * 根据ID查询记录
     * @param id
     * @return
     * 
     * @returns ProjectInfo
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午3:57:50
     */
    ProjectInfo selectByPrimaryKey(Integer id);
    
    /**
     * 查询记录
     * @param record
     * @return
     * 
     * @returns List<ProjectInfo>
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午4:00:35
     */
    List<ProjectInfo> selectByProjectInfo(ProjectVO record);
    
    /**
     * 新增项目，并更新其业务关系
     * @param projectBO
     * @return [参数说明]
     * 
     * @return int [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年6月8日上午11:09:45
     */
    int updateByPrimaryKeySelective(ProjectBO projectBO);
    
    /**
     * 根据ID更新记录，只更新参数中的非空属性
     * @param record
     * @return
     * 
     * @returns int
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午4:00:27
     */
    int updateByPrimaryKeySelective(ProjectInfo record);
    
    /**
     * 根据ID更新记录
     * @param record
     * @return
     * 
     * @returns int
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午4:02:07
     */
    int updateByPrimaryKey(ProjectInfo record);
    
    /**
     * 分页查询记录
     * @param record
     * @return
     * 
     * @returns PageInfo<ProjectBO>
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午4:03:31
     */
    PageInfo<ProjectBO> page(PageVO<ProjectVO> record);
    
    /**
     * 过滤掉不存在ID
     * @param ids
     * @return [参数说明]
     * 
     * @return List<Integer> [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年7月6日上午11:29:23
     */
    List<Integer> filterIds(List<Integer> ids);
    
    /**
     * 根据文档ID集获取记录
     * @param ids
     * @return
     * 
     * @returns List<ProjectInfo>
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午4:07:20
     */
    List<ProjectInfo> selectByDocIds(List<Integer> ids);
    
    /**
     * 根据用户和项目ID过滤用户有权限的项目ID
     * 
     * @param userId
     * @param idList
     * @param creator
     * @return
     * 
     * @returns List<Integer>
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年12月19日上午10:20:56
     */
    List<Integer> selectIdsByUser(Integer userId, List<Integer> idList, String creator);
    
}